// 循环单链表  // 适用于经常修改头尾结点的场景

#include "LinkedList_head-Define.cpp"

bool InitList(LinkList &L)
{
    L = (LNode *)malloc(sizeof(LNode)); 
    if( L==NULL )
    {
        return false;
    }
    L->next = L;  // 头结点next指向头结点
    return true;
}

bool Empty(LinkList L)
{
    if(L->next == L)  // 后继为头结点
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool isTail(LinkList L, LNode *p)
{
    if( p->next == L)
    {
        return true;
    }
    else
    {
        return false;
    }
}



// 循环双链表

typedef struct DNode
{
    int data;
    struct DNode *prior, *next;

}DNode, *DLinklist;


bool InitDLinkList(DLinklist &L)
{
    L = (DNode *)malloc(sizeof(DNode));
    if (L==NULL)
    {
        return false;
    }
    L->prior = L;  // 头结点的 prior 指向头结点
    L->next = L;  // 头结点的 next 指向头结点

    return true;
}

bool Empty(DLinklist L)
{
    if( L->next == L )  // 头结点指向头结点
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool isTail(DLinklist L, DNode *p)
{
    if(p->next == L)  // 后继节点为头结点
    {
        return true;
    }
    else
    {
        return false;
    }
}








